/*                                                                                                                                                                                                                                            
# 编程题一：复习类有关的基础知识

创建一个表示猫的类 `Cat`，并完成以下任务：

* 它有一个字符串类型的属性表示名字；
* 它有一个整数类型表示年龄；
* 它有两个 `Cat *` 属性分别指向它的父母；
* 定义一个构造函数，初始化这些属性；

在 `main` 函数里：

* 创建一个普通的 `Cat` 对象，并打印它的名字和年龄；
* 创建一个 `Cat *`，让它指向一个 `Cat` 对象，并打印这个指针指向的 `Cat` 对象的名字和年龄；
*/
#include <algorithm>
#include <vector>
#include <iostream>

using namespace std;

class Cat
{

public:
    string name;
    int age;

    Cat *mother;
    Cat *father;

    Cat(string nm = "", int v = 0, Cat *mm = nullptr, Cat *bb = nullptr) : name(nm), age(v), mother(mm), father(bb)
    {
        cout << "Cat: age(" << age << ") "
             << "name(" << name << ")" << endl;
        if (mother != nullptr)
        {
            cout << "mother: age(" << mother->age << ") "
                 << "name(" << mother->name << ")" << endl;
        }
        if (father != nullptr)
        {
            cout << "father: age(" << father->age << ") "
                 << "name(" << father->name << ")" << endl;
        }
    }   
};

int main(int argc, char const *argv[])
{
    Cat *father = new  Cat("baba", 5);
    Cat *mother = new  Cat("mama", 5);
    Cat TOM("TOM", 2, mother, father);

    return 0;
}


/*
# 编程题二：进一步巩固动态编程算法思想

> 提示一：这道题不会做没关系，可以提前自己想想，做到充分理解题意即可，这样可以为我们课上节约时间。

> 提示二：之前的两个硬币问题，我们使用了一维数组维护执行记录。现在为了比较两个字符串的差异，考虑使用二维数组，让 `str1` 的长度是行数、`str2` 的长度是列数，并观察行列位置上两个字符是否相等。

假设有两个字符串 `str1` 和 `str2`，编写一个函数，计算为了把 `str1` 变成 `str2` 所需要的**最少操作步骤**。我们管这个步骤，叫做 **Levenshtein Distance（莱文斯坦距离）**。在一些更复杂的应用中，我们使用这个距离，来评估两个字符串的相似程度。

我们能对字符串进行的操作，只有三种，分别是：

* 插入一个字符；
* 删除一个字符；
* 替换一个字符；

每做一个操作，都算一步。

例如，`str1 = "abc"` 和 `str2="yabd"`，为了把 `str1` 变成 `str2`，最少需要 **2步**，分别是：
                                                                                                
* 对 `str1` 插入 y；                                                                               
* 把 c 替换成 d；

*/
//```c++
int levenshteinDistance(string &str1, string &str2) {

    
    return 0;
}

//```

